const express = require('express');
const db = require('../db/index.js');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const expressJoi = require('@escook/express-joi');
const { jwtSecretKey, jwtExpiresIn } = require('../config.js');
const { reg_login_schema } = require('../schema/user.js');
// 创建路由对象
const router = express.Router();

router.use((req, res, next) => {
  const { method } = req;
  // 如果请求的是 post 请求方法，则挂载 express.urlencoded 中间件
  if (method === 'POST') {
    const middleware = express.urlencoded();
    // 自定义中间件需要手动调用，并且把 req, res, next 传递下去
    middleware(req, res, next);
  } else {
    next();
  }
});

// router.post(/^\//, express.urlencoded())

// 注册新用户
router.post('/reguser', expressJoi(reg_login_schema), (req, res) => {
  let { username, password } = req.body;

  // // 数据校验
  // //   服务端校验：服务器这边的校验是必须的，最后到一个关卡，因为可以通过各种手段绕过浏览器的校验）
  // //   客户端校验：提升用户交互体验，减轻服务器压力
  // if (!username || !password) {
  //   // return res.send({
  //   //   status: 1,
  //   //   message: '用户名或密码不能为空！',
  //   // });
  //   return res.cc('用户名或密码不能为空！');
  // }

  db.query('select * from ev_users where username=?', [username], (err, results) => {
    if (err) {
      // return res.send({
      //   status: 1,
      //   message: err.message,
      // });
      return res.cc(err);
    }

    if (results.length > 0) {
      // return res.send({
      //   status: 1,
      //   message: '该用户名已存在，换个试试',
      // });
      return res.cc('该用户名已存在，换个试试');
    }

    // 合法可用的用户名

    // 加密
    console.log(password);

    password = bcrypt.hashSync(password);

    // 插入用户信息
    db.query('insert into ev_users set ?', { username, password }, (err, result) => {
      // if (err) return res.send({ status: 1, message: err.message });
      if (err) return res.cc(err);

      if (result.affectedRows !== 1) {
        // return res.send({ status: 1, message: '服务器错误，请稍后重试' });
        return res.cc('服务器错误，请稍后重试');
      }

      // res.send({ status: 0, message: '注册成功' });
      res.cc('注册成功', 0);
    });

    console.log(password);
  });
});

// 登录
router.post('/login', expressJoi(reg_login_schema), (req, res) => {
  const { username, password } = req.body;

  // 先查用户数据
  db.query('select * from ev_users where username=?', [username], (err, results) => {
    console.log(results);
    if (results.length > 0) {
      // 再校验密码正确与否
      let user = results[0];
      // 如果 isOk 为ture：密码一致，否则不一致
      const isOk = bcrypt.compareSync(password, user.password);
      if (!isOk) {
        return res.cc('密码不正确');
      }

      user = { ...user, password: '', user_pic: '' };

      const token = jwt.sign(user, jwtSecretKey, { expiresIn: jwtExpiresIn });

      // res.cc('login ok', 0, `Bearer ${token}`);
      res.send({
        status: 0,
        message: 'login ok',
        token: `Bearer ${token}`
      })
    }
  });
});

// 将路由对象共享出去
module.exports = router;
